Hi there! 我是嘟嘟~受到前輩啟發,想說可以紀錄一下自己練習的過程,小女子為程式菜逼八,此系列非教學文,僅為個人解題筆記,可能有錯誤或未補充詳盡之處,歡迎前輩們不吝指教!也歡迎正在自學的夥伴一起討論學習~
輸入一個整數n
,作為函式factorial()
的參數
注意:如果您無法使用遞迴或未能將遞迴函數命名為階乘或階乘,則得分為。
If you fail to use recursion or fail to name your recursive function factorial or Factorial, you will get a score of 0 .
建立一個函式factorial(n)
,並印出n的階乘,代表從 1 開始連乘直到 n 為止,意即 n! = 1 x 2 x ... x n
3
6
#!/bin/python3
import math
import os
import random
import re
import sys
# Complete the factorial function below.
def factorial(n):
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
n = int(input())
result = factorial(n)
fptr.write(str(result) + '\n')
fptr.close()
from functools import reduce #導入函數reduce
n = int(input())
def factorial(n):
def prod(x,y):
return x*y
seq = [i for i in range(1,n+1)] #生成一個1~n的列表
return reduce(prod,seq) #對列表的前兩個元素相乘後,再與後一個元素相乘,直到乘完所有元素
print(factorial(n))
第一個想法是導入reduce()函數,但因為題目要求一個factorial()函式才會判斷通過,就變成要在多包裝一次,後來才發現是自己太菜逼八,還不懂遞迴函數的概念,修改後,看起來更簡潔直觀了:
n = int(input())
def factorial(n):
return 1 if n == 1 else n*factorial(n-1)
print(factorial(n))
輸入 10
結果為 3628800
將大問題拆分成一個個小問題,再各自將小問題解決以後得到答案,稱為分治法(Divide and Conquer),遞迴這個方法就是依據此概念形成的。
在數學以及電腦科學的領域當中,當一個函式會在執行當中,會不斷地自己呼叫自己時,我們便認為這個函式具有遞迴的性質。同時,為了避免函式永無止盡地自我呼叫 (self-calling),我們也需要設計一個明確的終止條件。因此,我們便得到了設計一個遞迴函式的兩個重點:
最常用到遞迴的情況是?
階乘 Factorial
費氏數列 Fibonacci sequence
最大公因數 GCD
基本上,大多數能被遞迴解決的問題,都可以找出迴圈解。如果使用遞迴的概念解題,通常可以將艱難的問題用簡單的想法解決;但是使用迴圈來改寫的話,通常可以增進程式運行的效率。
上面這段大錯特錯!!! 要是這樣簡單二分,迴圈勝過遞迴,那真是太簡單的世界了.
可惜不是.
初學者其實不需要到處去找一堆解釋,像心原一馬就很愛寫一些他個人看法,也不只他這樣,
現在有很多人寫blog,或是文章,雖然很好心的解釋.但是初學者最好不要貪圖快速,把這些
好心人的結論快速的烙印進去,而是要逐步的練習領悟.
最好是看書,這類的解題網站,我個人看法是進度太過快了.
瞭解,已修正!小的會再更謹慎一點的!!
非常感謝您的閱讀和建議!!
我是誇獎你啊.說你是好人啊,有心分享啊.
我是勸她別光只是找,查看,單純吸收,也要自己多思考.
也鼓勵你可以多回答問題,這也是一種互動.
蠻多人都不給最佳解答 , 這是老問題了.也不只這裡如此.
以前還有刪文,然後整串消失,很可惜的.後來經過許多人反應,
才改的.
回答問題,有些是很精彩的.